feat(hardware): expose CleanAreaV2 on the 4 mower models#1596
Open
Beennnn wants to merge 1 commit into
Open
Conversation
Adds `area=CleanAreaV2` to `CapabilityCleanAction` for the GOAT family
(xmp9ds A1600 RTK, 5xu9h3 G1, 51rcxt A3000 LiDAR Pro, 300lc5 O500
Panorama). The mowers already accept the same `clean_V2` payload with
`{"act":"s","content":{"type":"spotArea","value":"<zone_id>"}}` — verified
via MQTT sniff on a real A1600 (Trampo zone id=1 confirmed).
Consumers (e.g. home-assistant/core) can now invoke
`device.capabilities.clean.action.area(CleanMode.SPOT_AREA, [zone_id], 1)`
to launch a specific zone on a mower without falling back to the
`Map complete` action.
`getAreaSet type:"ar"` returns the zone definitions (LZMA+base64
encoded) with stable numeric IDs that map to the named zones in the
Ecovacs app, enabling clients to build a zone-name → id lookup at
runtime.
The `CleanAreaV2` API itself is unchanged — this is a pure capability
exposure on hardware definitions.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #1596 +/- ##
==========================================
+ Coverage 94.92% 94.99% +0.07%
==========================================
Files 156 158 +2
Lines 6105 6199 +94
Branches 350 353 +3
==========================================
+ Hits 5795 5889 +94
Misses 248 248
Partials 62 62 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
area=CleanAreaV2toCapabilityCleanActionfor the 4 mower hardware models —xmp9ds(GOAT A1600 RTK),5xu9h3(GOAT G1),51rcxt(GOAT A3000 LiDAR Pro),300lc5(GOAT O500 Panorama).Before this change the mower
CapabilityCleanActionhad onlycommand=CleanV2and consumers could not launch a specific zone — they had to fall back to the full-map action.Why
Mowers accept the exact same
clean_V2payload shape as vacuums for spot-area cleaning:{"act":"s","content":{"type":"spotArea","value":"<zone_id>"}}Verified on a real GOAT A1600 (FW 1.15.13) by MQTT sniff while the official app launched zone "Trampo":
getCleanInforesponse reportedcleanState.content = {"type":"spotArea","value":"1"}confirming the same envelope as the existing vacuum CleanAreaV2 implementation produces.getAreaSet type:"ar"exposes the named zones with stable numeric IDs (LZMA+base64 encoded insubsets), giving consumers aname → idlookup table at runtime.So the lib already had the right command (
CleanAreaV2) — only the hardware capability declarations needed updating.What changed
deebot_client/hardware/xmp9ds.pydeebot_client/hardware/5xu9h3.pydeebot_client/hardware/51rcxt.pydeebot_client/hardware/300lc5.pyEach file gets
CleanAreaV2added to thefrom deebot_client.commands.json.clean import …andarea=CleanAreaV2attached to the existingCapabilityCleanAction(command=CleanV2, …).8 lines changed total (4 imports + 4 area parameters).
Tests
pytest tests/hardware/→ 7 passedpytest tests/commands/json/test_clean.py→ 27 passedCleanAreaV2class itself is already covered by the vacuum-side suite; this PR just wires its existing behavior to the mower capability so no new test logic is needed for the command itself.Notes
CleanV2(start/stop/pause/resume) is unchanged — area is an additive capability, not a replacement.🤖 Generated with Claude Code